#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <cstdlib>
#include <sys/wait.h>
using namespace std;
//volatile int flag=0;

// void handler(int signu)
// {
//     cout<<"更改全局变量: "<<"flag -> "<<flag<<endl;
//     flag=1;
// }



// int main()
// {
//     signal(2,handler);
//     while(!flag);
//     cout<<"process quit normal"<<endl;
//     return 0;
// }


// void Say(int num)
// {
//     cout<<"father get a signal: "<<num<<endl;

// }
// int main()
// {
//     signal(SIGCHLD,Say);//父进程进行注册的
//     pid_t id=fork(); 
//     if(id==0)
//     {
//         cout<<"I am child,exit"<<endl;
//         sleep(3);
//         exit(3);
//     }
//     waitpid(id,nullptr,0);
//     cout<<"I  am father,exit"<<endl;
//     return 0;
// }
// volatile int count = 0;
// void waitall(int) {
//     while(1) {
//         pid_t n = waitpid(-1, nullptr, WNOHANG);
//         if(n > 0) {
//             count++;  // 计数回收的进程数
//             cout << "Recycled child: " << n << endl;
//         }
//         else if(n == 0) break;
//         else if(n < 0) {
//             if(errno == ECHILD) break; // 无子进程时正常退出
//             perror("waitpid error");
//             break;
//         }
//     }
//     cout << "Total recycled: " << count << endl;
// }
int main()
{
    signal(SIGCHLD,SIG_IGN);//接收子进程退出的信号并执行相应的函数
    for(int i=0;i<10;i++)
    {
        pid_t id=fork();
        if(id==0)
        {
            sleep(3);
            cout<<"I am child ,exit "<<endl;
            if(i<6) exit(3);
            else pause();   
        }
    }
    while(1)
    {
        cout<<"I am father exit "<<endl;
        sleep(1);
    }
    return 0;
}